package 面试经典150题.数组;

import java.util.Arrays;

/**
 * @author tmh
 * @date 2024/7/1 19:41
 * @description
 * 方法一：排序
 *
 * 我们可以先对数组 citations 按照元素值从大到小进行排序。然后我们从大到小枚举 h 值，
 * 如果某个 h 值满足 citations[h−1]≥h，则说明有至少 h 篇论文分别被引用了至少 h 次，直接返回 h 即可。
 * 如果没有找到这样的 h 值，说明所有的论文都没有被引用，返回 0。
 *
 * 作者：ylb
 * 链接：https://leetcode.cn/problems/h-index/solutions/2502876/python3javacgotypescript-yi-ti-san-jie-p-73t5/
 * 来源：力扣（LeetCode）
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 */
public class T274H指数 {
    public int hIndex(int[] citations) {
        Arrays.sort(citations);
        int n = citations.length;
        for (int h = n; h > 0; h--) {
            //因为是排序好了的，所以这里是相当于从前往后面进行比较
            //举一个例子:citations = [3,0,6,1,5]
            //排序之后就是[0,1,3,5,6]
            //当你比较到第三个数3了的时候，此时h=3,因为后面的5 和 6 也是升序了的
            //所以数组里面有三个数是大于等于3，即就是原来的论文有三篇被引用的次数大于等于三
            if (citations[n - h] >= h) {
                return h;
            }
        }
        return 0;
    }
}
